package v1

import (
	"com.yt/models"
	"com.yt/utils"
	"github.com/gin-gonic/gin"
)

// ShowAccount godoc
// @Summary 查询订单信息 对应页面 /order
// @Description 查询订单信息
// @ID get-order-by-string
// @Accept  json
// @Produce  json
// @Param order_sn query int true "订单order_sn"
// @Success 200 {object} utils.SuccessData
// @Failure 400 {object} utils.HTTPError
// @Failure 404 {object} utils.HTTPError
// @Failure 500 {object} utils.HTTPError
// @Router /api/v1/orders/query [get]
func GetOrderByOrderSn(ctx *gin.Context) {
	var order models.Order
	ctx.ShouldBind(&order)
	if order.OrderSn == "" {
		utils.NewErrorMsg(ctx, "参数必填项不能为空")
		return
	}
	db := models.GetDb()
	db.Where(&order).Find(&order)
	if order.ID == 0 {
		utils.NewErrorMsg(ctx, "订单信息不存在")
		return
	}
	utils.NewData(ctx, order)
	return
}

// ShowAccount godoc
// @Summary 生成订单信息 对应页面 /confirm
// @Description 生成订单信息
// @ID put-order
// @Accept  json
// @Produce  json
// @Param product_id query int true "商品ID"
// @Param user_id query int true "用户ID"
// @Param number query int true "购买数量"
// @Param customer_order_no query string true "嘉银流水号"
// @Success 200 {object} utils.SuccessData
// @Failure 400 {object} utils.HTTPError
// @Failure 404 {object} utils.HTTPError
// @Failure 500 {object} utils.HTTPError
// @Router /api/v1/orders [post]
func GenerateOrder(ctx *gin.Context) {
	var order models.Order
	if ctx.ShouldBind(&order) != nil {
		utils.NewErrorMsg(ctx, "参数必填项不能为空")
		return
	}
	db := models.GetDb()
	//订单金额
	var product models.Product

	product.ID = order.ProductId
	db.Where(&product).Find(&product)
	if product.ID == 0 {
		utils.NewErrorMsg(ctx, "您购买的商品信息不存在")
		return
	}
	//初始化订单
	order.Amount = float64(order.Number) * product.Price
	order.OrderSn = utils.GenerateOrderSn()
	db.Create(&order)
	utils.NewSuccessMsgWithData(ctx, "订单创建成功", order)
	return
}

// ShowAccount godoc
// @Summary 发起订单支付请求 对应页面 /pay
// @Description 发起订单支付请求
// @ID pay-order
// @Accept  json
// @Produce  json
// @Param order_sn query string true "本平台订单号 order_sn"
// @Param mobile query string true "需要充值的账号 一般是手机号 mobile"
// @Param pay_channel query string true "支付渠道 wx|alipay order_sn"
// @Success 200 {object} utils.SuccessData
// @Failure 400 {object} utils.HTTPError
// @Failure 404 {object} utils.HTTPError
// @Failure 500 {object} utils.HTTPError
// @Router /api/v1/orders/pay [post]
func PayOrder(ctx *gin.Context) {

	var form models.Order
	_ = ctx.ShouldBind(&form)
	if form.OrderSn == "" || form.PayChannel == "" || form.Mobile == "" {
		utils.NewErrorMsg(ctx, "参数必填项不能为空")
		return
	}
	if form.PayChannel != models.PayChannelAlipay && form.PayChannel != models.PayChannelWx {
		utils.NewErrorMsg(ctx, "暂不支持该支付方式")
		return
	}
	var order models.Order
	db := models.GetDb()
	db.Where("order_sn=?", form.OrderSn).Find(&order)
	if order.ID == 0 {
		utils.NewErrorMsg(ctx, "未查询到相关订单信息")
		return
	}
	order.PayChannel = form.PayChannel
	order.Mobile = form.Mobile
	db.Save(order)
	utils.NewSuccessMsgWithData(ctx, "订单提交成功", order)
	return
}
